﻿/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

using System;
using System.Data;
using System.Data.SqlClient;
using System.Collections.Generic;
using MySql.Data.MySqlClient;
using System.Windows.Forms;
using FAS;
using FasGUI;
/**
 *
 * @author Payo
 */
namespace Arquitectura.SEM
{

    public class ConexionMySQLSEM
    {
        /*VARIABLES DE USO GENERAL*/
        private MySqlConnection sqlCn;
        private DataSet Ds;
        private MySqlDataAdapter sqlDa;
        private MySqlCommand sqlCm;
        private string conexion = "Server = " + ip + "; Database = fas; Uid = fasuser; Pwd = GJ5fEnaZbTBAEFBB";
        public static String ip;
        /* Metodo: getQuery
         * Funcion: obtener DataSet de una query
         * String query - query a realizar
         * Regresa DataSet
         */

        public DataSet GetQuery(String query)
        {
            try
            {
                sqlCn = new MySqlConnection(conexion);
                sqlCm = sqlCn.CreateCommand();
                sqlCm.CommandText = query;
                sqlCn.Open();
                sqlDa = new MySqlDataAdapter(sqlCm);
                Ds = new DataSet();
                sqlDa.Fill(Ds);
                return Ds;
            }
            catch (Exception e)
            {
                new MensajeError("Error de Conexion", e.ToString(), "Error MysqlConnection").ShowDialog();
                return null;
            }
            finally
            {
                sqlCn.Close();
            }
        }//fin del metodo getQuery

        /* Metodo: getQuery
         * Funcion: obtener DataSet de una query
         * String query - query a realizar
         * Regresa DataSet
         */

        public DataSet GetQuery(String procedure , Dictionary<String,object> diccionario)
        {
            try
            {
                sqlCn = new MySqlConnection(conexion);
                sqlCn.Open();
                sqlCm = new MySqlCommand(procedure, sqlCn);
                sqlCm.CommandType = CommandType.StoredProcedure;
                foreach (var row in diccionario)
                    sqlCm.Parameters.AddWithValue(row.Key, row.Value);
                sqlDa = new MySqlDataAdapter(sqlCm);
                Ds = new DataSet();
                sqlDa.Fill(Ds);
                return Ds;
            }
            catch (Exception e)
            {
                new MensajeError("Error de Conexion", e.ToString(), "Error MysqlConnection").ShowDialog();
                return null;
            }
            finally
            {
                sqlCn.Close();
            }
        }//fin del metodo getQuery

        /* Metodo: AcccionesDB
         * Funcion: Processos en la base de datos
         * String: Diccionario de parametros y valores, nombre del stored procedure
         * Regresa T/F
         */

        public Boolean AccionesDB(Dictionary<String, Object> diccionario, String procedure)
        {
            try
            {
                sqlCn = new MySqlConnection(conexion);
                sqlCn.Open();
                sqlCm = new MySqlCommand(procedure, sqlCn);
                sqlCm.CommandType = CommandType.StoredProcedure;
                foreach (var row in diccionario)
                    sqlCm.Parameters.AddWithValue(row.Key, row.Value);
                sqlCm.ExecuteNonQuery();
                return true;
            }
            catch (Exception e)
            {
                new MensajeError("Error de Conexion", e.ToString(), "Error MysqlConnection").ShowDialog();
                return false;
            }
            finally
            {
                sqlCn.Close();
            }

        } // fin del metodo InsertarParametros

        public Boolean AccionesDB(String procedure)
        {
            try
            {
                sqlCn = new MySqlConnection(conexion);
                sqlCn.Open();
                sqlCm = new MySqlCommand(procedure, sqlCn);
                sqlCm.ExecuteNonQuery();
                return true;
            }
            catch (Exception e)
            {
                new MensajeError("Error de Conexion", e.ToString(), "Error MysqlConnection").ShowDialog();
                return false;
            }
            finally
            {
                sqlCn.Close();
            }

        } // fin del metodo InsertarParametros

        /* Metodo: insertar
         * Funcion: Meter registro a la base de datos
         * Diccionario parametros y valores, nombre del stored procedure, atributo id de la tabla, nombre de la tabla
         * Regresa ID/-1
         */

        public int insertar(Dictionary<String, Object> diccionario, String procedure, String id, String tabla)
        {
            try
            {
                sqlCn = new MySqlConnection(conexion);
                sqlCn.Open();
                sqlCm = new MySqlCommand(procedure, sqlCn);
                sqlCm.CommandType = CommandType.StoredProcedure;
                foreach (var row in diccionario)
                    sqlCm.Parameters.AddWithValue(row.Key, row.Value);
                sqlCm.ExecuteNonQuery();
                MySqlCommand last = new MySqlCommand("SELECT " + id + " FROM " + tabla + " ORDER BY " + id + " DESC LIMIT 1", sqlCn);
                MySqlDataAdapter adapter = new MySqlDataAdapter();
                adapter.SelectCommand = last;
                DataSet data = new DataSet();
                adapter.Fill(data);
                return int.Parse(data.Tables[0].Rows[0][id].ToString());
            }
            catch (Exception e)
            {
                new MensajeError("Error de Conexion", e.ToString(), "Error MysqlConnection").ShowDialog();
                return -1;
            }
            finally
            {
                sqlCn.Close();
            }

        } // fin del metodo Insertar
        /* Metodo: insertar
         * Funcion: Meter registro a la base de datos
         * Diccionario parametros y valores, nombre del stored procedure, atributo id de la tabla, nombre de la tabla
         * Regresa ID/-1
         */

        public int insertar(Dictionary<String, Object> diccionario, String procedure)
        {
            try
            {
                sqlCn = new MySqlConnection(conexion);
                sqlCn.Open();
                sqlCm = new MySqlCommand(procedure, sqlCn);
                sqlCm.CommandType = CommandType.StoredProcedure;
                foreach (var row in diccionario)
                    sqlCm.Parameters.AddWithValue(row.Key, row.Value);
                sqlCm.ExecuteNonQuery();
                return 1;
            }
            catch (Exception e)
            {
                new MensajeError("Error de Conexion", e.ToString(), "Error MysqlConnection").ShowDialog();
                return -1;
            }
            finally
            {
                sqlCn.Close();
            }

        } // fin del metodo Insertar

    } //fin de la clase principal ConexionMySql
}